<?php

/**
 * Controller base para servir de herança para outros controllers. Nesse
 * controller serão criados métodos comuns a toda aplicação
 *
 * @author Igor Rocha <igortice@gmail.com>
 * @copyright Copyright (c) 2012, Igor Rocha
 */
abstract class BaseController extends Zend_Controller_Action
{

    /**
     * Método para ser inicializado antes de qualquer ação
     *
     * @return void
     */
    public function init()
    {
        parent::init();
    }

    /**
     * Alias para pegar nome do controller
     *
     * @return string
     */
    public function getController()
    {
        return $this->getRequest()->getParam('controller');
    }

    /**
     * Alias para pegar nomde da action
     *
     * @return string
     */
    public function getAction()
    {
        return $this->getRequest()->getParam('action');
    }

    /**
     * Método para tratar o recebimento de um post
     *
     * @param string $value
     * @return string
     */
    public function getPostTrimTags($value)
    {
        if (isset($value)) {
            $filterChain = new Zend_Filter();
            $filterChain
                ->addFilter(new Zend_Filter_StripTags())
                ->addFilter(new Zend_Filter_StringTrim());

            return $filterChain->filter($this->_request->getParam($value));
        }

        return false;
    }

    /**
     * Método para nao renderizar para uma action e para desabilitar layout
     *
     * @return void
     */
    public function ajaxNoRender()
    {
        $this->_helper->viewRenderer->setNoRender();
        $this->_helper->layout->disableLayout();
    }

    /**
     * Método para verificar se uma requisicao é do tipo post e ajax
     *
     * @return boolean
     */
    public function isPostAjax()
    {
        return $this->_request->isPost() && $this->_request->isXmlHttpRequest() ? true : false;
    }

    /**
     * Método para verificar se uma requisicao é do tipo ajax
     *
     * @return boolean
     */
    public function isAjax()
    {
        return $this->_request->isXmlHttpRequest() ? true : false;
    }

    /**
     * Método para retorna o nome do sistema no application.ini
     *
     * @return string
     */
    public function getNameSystem()
    {
        return Zend_Registry::get('sistema.nome');
    }

    /**
     * Método para retorna a versao do sistema no application.ini
     *
     * @return string
     */
    public function getVersionSystem()
    {
        return Zend_Registry::get('sistema.versao');
    }
    
    /**
     * Método para retorna a emrpesa do sistema no application.ini
     *
     * @return string
     */
    public function getEmpresaSystem()
    {
        return Zend_Registry::get('sistema.empresa');
    }

    /**
     * Médoto para obter url do alfresco passada no application.ini
     *
     * @return string
     */
    public function getUrlAlfresco()
    {
        return Zend_Registry::get('alfresco.url') . '/service';
    }

    /**
     * Método para obter ticket do usuário logado
     *
     * @return string
     */
    public function getTicket()
    {
        $service = new Alfresco_Rest_Login($this->getUrlAlfresco());
        $result = $service->login(Zend_Registry::get('alfresco.usuario'), Zend_Registry::get('alfresco.password'));
        $service->logout($result['ticket']);
        if (!$result['ticket']) {
        	throw new Exception("Login failed");
        }
        
        return $result['ticket'];
    }

    /**
     * Método para retornar a base da url do projeto
     *
     * @return string
     */
    public function baseUrl()
    {
        $base = new Zend_View_Helper_BaseUrl();
        return $base->baseUrl();
    }

    /**
     * Método para redirecionamento para /home/index
     *
     * @return void
     */
    public function redirectHome()
    {
        return $this->_redirect(array('action' => 'home', 'controller' => 'index'));
    }

    /**
     * Método para evitar acesso indevido se não for por requisição ajax
     * 
     * @return void 
     */
    public function checkAjaxGetPost()
    {
        if (!$this->isAjax())
            $this->redirectHome();
    }
    
    
    public function pageNoFound()
    {
        echo '<h1>Opss!!! Página não encontrada!</h1>';
    }

}
